#pragma once

#include <SFML/Graphics.hpp>

class WindowManager;
class StateManager;
class LevelManager;
class EntityManager;

class GameService
{

	//Singleton -----------------------------
public:
	static GameService* GetInstance();

protected:
	GameService();
	GameService(const GameService&);
	GameService& operator= (const GameService&);

private:
	static GameService* m_pInstance;
	//--------------------------------------


public:
	void Setup();
	~GameService();

	bool Tick(float DeltaTime);
	void OnInput(sf::Event::KeyEvent* pKeyEvent, bool keyDown);

	void Quit();

	WindowManager* GetWindowManager();
	StateManager* GetStateManager();
	LevelManager* GetLevelManager();
	EntityManager* GetEntityManager();

private:
	bool m_quitting;

	WindowManager* m_pWindowManager;
	StateManager* m_pStateManager;
	LevelManager* m_pLevelManager;
	EntityManager* m_pEntityManager;
};